{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'c:\\\\Users\\\\jaesc2\\\\GitHub\\\\skforecast'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "import sys\n",
    "from pathlib import Path\n",
    "sys.path.insert(1, str(Path.cwd().parent))\n",
    "str(Path.cwd().parent)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Libraries\n",
    "# ==============================================================================\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from skforecast.recursive import ForecasterRecursive\n",
    "from skforecast.model_selection import backtesting_forecaster, TimeSeriesFold\n",
    "from sklearn.linear_model import Ridge\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.metrics import mean_squared_error\n",
    "import time\n",
    "from lightgbm import LGBMRegressor\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\jaesc2\\AppData\\Local\\Temp\\ipykernel_40276\\1853947156.py:12: FutureWarning: 'H' is deprecated and will be removed in a future version, please use 'h' instead.\n",
      "  data = data.resample(rule='H', closed='left', label ='right').mean()\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "26304"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Descarga de data\n",
    "# ==============================================================================\n",
    "url = (\n",
    "    'https://raw.githubusercontent.com/skforecast/skforecast-datasets/refs/heads/main/data/vic_electricity.csv'\n",
    ")\n",
    "data = pd.read_csv(url, sep=',')\n",
    "data['Time'] = pd.to_datetime(data['Time'], format='%Y-%m-%dT%H:%M:%SZ')\n",
    "data = data.set_index('Time')\n",
    "data = data.asfreq('30min')\n",
    "data = data.sort_index()\n",
    "data = data.drop(columns='Date')\n",
    "data = data.resample(rule='H', closed='left', label ='right').mean()\n",
    "len(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Backtesting forecaster\n",
    "# ==============================================================================\n",
    "forecaster = ForecasterRecursive(\n",
    "                 estimator = LGBMRegressor(random_state=123, verbose=-1),\n",
    "                 lags      = 24 \n",
    "             )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">╭──────────────────────────────── LongTrainingWarning ─────────────────────────────────╮</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span> The forecaster will be fit 368 times. This can take substantial amounts of time. If  <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span> not feasible, try with `refit = False`.                                              <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>                                                                                      <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>                                                                                      <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span> Category : LongTrainingWarning                                                       <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span> Location :                                                                           <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span> c:\\Users\\jaesc2\\GitHub\\skforecast\\skforecast\\model_selection\\_validation.py:240      <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span> Suppress : warnings.simplefilter('ignore', category=LongTrainingWarning)             <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">╰──────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[38;5;214m╭─\u001b[0m\u001b[38;5;214m───────────────────────────────\u001b[0m\u001b[38;5;214m LongTrainingWarning \u001b[0m\u001b[38;5;214m────────────────────────────────\u001b[0m\u001b[38;5;214m─╮\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m The forecaster will be fit 368 times. This can take substantial amounts of time. If  \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m not feasible, try with `refit = False`.                                              \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m                                                                                      \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m                                                                                      \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m Category : LongTrainingWarning                                                       \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m Location :                                                                           \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m c:\\Users\\jaesc2\\GitHub\\skforecast\\skforecast\\model_selection\\_validation.py:240      \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m Suppress : warnings.simplefilter('ignore', category=LongTrainingWarning)             \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m╰──────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">╭──────────────────────────────── LongTrainingWarning ─────────────────────────────────╮</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span> The forecaster will be fit 52 times. This can take substantial amounts of time. If   <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span> not feasible, try with `refit = False`.                                              <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>                                                                                      <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>                                                                                      <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span> Category : LongTrainingWarning                                                       <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span> Location :                                                                           <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span> c:\\Users\\jaesc2\\GitHub\\skforecast\\skforecast\\model_selection\\_validation.py:240      <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span> Suppress : warnings.simplefilter('ignore', category=LongTrainingWarning)             <span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">│</span>\n",
       "<span style=\"color: #ffaf00; text-decoration-color: #ffaf00\">╰──────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[38;5;214m╭─\u001b[0m\u001b[38;5;214m───────────────────────────────\u001b[0m\u001b[38;5;214m LongTrainingWarning \u001b[0m\u001b[38;5;214m────────────────────────────────\u001b[0m\u001b[38;5;214m─╮\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m The forecaster will be fit 52 times. This can take substantial amounts of time. If   \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m not feasible, try with `refit = False`.                                              \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m                                                                                      \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m                                                                                      \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m Category : LongTrainingWarning                                                       \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m Location :                                                                           \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m c:\\Users\\jaesc2\\GitHub\\skforecast\\skforecast\\model_selection\\_validation.py:240      \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m│\u001b[0m Suppress : warnings.simplefilter('ignore', category=LongTrainingWarning)             \u001b[38;5;214m│\u001b[0m\n",
       "\u001b[38;5;214m╰──────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "ename": "KeyError",
     "evalue": "'seconds'",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mKeyError\u001b[39m                                  Traceback (most recent call last)",
      "\u001b[32m~\\AppData\\Local\\Temp\\ipykernel_40276\\2403136279.py\u001b[39m in \u001b[36m?\u001b[39m\u001b[34m()\u001b[39m\n\u001b[32m     33\u001b[39m                       \u001b[33m'execution time (s)'\u001b[39m: results,\n\u001b[32m     34\u001b[39m                       \u001b[33m'metric'\u001b[39m: metrics},\n\u001b[32m     35\u001b[39m           )\n\u001b[32m     36\u001b[39m \n\u001b[32m---> \u001b[39m\u001b[32m37\u001b[39m results = results.sort_values(by=[\u001b[33m'seconds'\u001b[39m])\n\u001b[32m     38\u001b[39m results\n",
      "\u001b[32mc:\\Users\\jaesc2\\Miniconda3\\envs\\skforecast_py12\\Lib\\site-packages\\pandas\\core\\frame.py\u001b[39m in \u001b[36m?\u001b[39m\u001b[34m(self, by, axis, ascending, inplace, kind, na_position, ignore_index, key)\u001b[39m\n\u001b[32m   7192\u001b[39m             )\n\u001b[32m   7193\u001b[39m         \u001b[38;5;28;01melif\u001b[39;00m len(by):\n\u001b[32m   7194\u001b[39m             \u001b[38;5;66;03m# len(by) == 1\u001b[39;00m\n\u001b[32m   7195\u001b[39m \n\u001b[32m-> \u001b[39m\u001b[32m7196\u001b[39m             k = self._get_label_or_level_values(by[\u001b[32m0\u001b[39m], axis=axis)\n\u001b[32m   7197\u001b[39m \n\u001b[32m   7198\u001b[39m             \u001b[38;5;66;03m# need to rewrap column in Series to apply key function\u001b[39;00m\n\u001b[32m   7199\u001b[39m             \u001b[38;5;28;01mif\u001b[39;00m key \u001b[38;5;28;01mis\u001b[39;00m \u001b[38;5;28;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n",
      "\u001b[32mc:\\Users\\jaesc2\\Miniconda3\\envs\\skforecast_py12\\Lib\\site-packages\\pandas\\core\\generic.py\u001b[39m in \u001b[36m?\u001b[39m\u001b[34m(self, key, axis)\u001b[39m\n\u001b[32m   1907\u001b[39m             values = self.xs(key, axis=other_axes[\u001b[32m0\u001b[39m])._values\n\u001b[32m   1908\u001b[39m         \u001b[38;5;28;01melif\u001b[39;00m self._is_level_reference(key, axis=axis):\n\u001b[32m   1909\u001b[39m             values = self.axes[axis].get_level_values(key)._values\n\u001b[32m   1910\u001b[39m         \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m-> \u001b[39m\u001b[32m1911\u001b[39m             \u001b[38;5;28;01mraise\u001b[39;00m KeyError(key)\n\u001b[32m   1912\u001b[39m \n\u001b[32m   1913\u001b[39m         \u001b[38;5;66;03m# Check for duplicates\u001b[39;00m\n\u001b[32m   1914\u001b[39m         \u001b[38;5;28;01mif\u001b[39;00m values.ndim > \u001b[32m1\u001b[39m:\n",
      "\u001b[31mKeyError\u001b[39m: 'seconds'"
     ]
    }
   ],
   "source": [
    "refits = [7, 14, 30]\n",
    "refits = [False, True] + refits\n",
    "results = []\n",
    "metrics = []\n",
    "\n",
    "for refit in refits:\n",
    "\n",
    "    cv = TimeSeriesFold(\n",
    "        steps=24,\n",
    "        initial_train_size=17482,\n",
    "        fixed_train_size=False,\n",
    "        refit=refit,\n",
    "        verbose=False\n",
    "    )\n",
    "\n",
    "    tic = time.perf_counter()\n",
    "\n",
    "    metric, predictions = backtesting_forecaster(\n",
    "                            forecaster    = forecaster,\n",
    "                            y             = data['Demand'],\n",
    "                            cv            = cv,\n",
    "                            metric        = 'mean_absolute_error',\n",
    "                            verbose       = False,\n",
    "                            show_progress = False\n",
    "                        )\n",
    "\n",
    "    toc = time.perf_counter()\n",
    "\n",
    "    results.append(toc - tic)\n",
    "    metrics.append(metric)\n",
    "\n",
    "results = pd.DataFrame(\n",
    "              data = {'refit value': refits, \n",
    "                      'execution time (s)': results, \n",
    "                      'metric': metrics},\n",
    "          )\n",
    "\n",
    "results = results.sort_values(by=['execution time (s)'])\n",
    "results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>refit value</th>\n",
       "      <th>execution time (s)</th>\n",
       "      <th>metric</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>30</td>\n",
       "      <td>8.839183</td>\n",
       "      <td>mean_absolute_error\n",
       "0           263.428653</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14</td>\n",
       "      <td>12.318892</td>\n",
       "      <td>mean_absolute_error\n",
       "0           262.528465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>False</td>\n",
       "      <td>15.000322</td>\n",
       "      <td>mean_absolute_error\n",
       "0           262.509329</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7</td>\n",
       "      <td>16.615812</td>\n",
       "      <td>mean_absolute_error\n",
       "0           261.350947</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>True</td>\n",
       "      <td>83.089239</td>\n",
       "      <td>mean_absolute_error\n",
       "0           258.736184</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  refit value  execution time (s)  \\\n",
       "4          30            8.839183   \n",
       "3          14           12.318892   \n",
       "0       False           15.000322   \n",
       "2           7           16.615812   \n",
       "1        True           83.089239   \n",
       "\n",
       "                                          metric  \n",
       "4     mean_absolute_error\n",
       "0           263.428653  \n",
       "3     mean_absolute_error\n",
       "0           262.528465  \n",
       "0     mean_absolute_error\n",
       "0           262.509329  \n",
       "2     mean_absolute_error\n",
       "0           261.350947  \n",
       "1     mean_absolute_error\n",
       "0           258.736184  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results = results.sort_values(by=['execution time (s)'])\n",
    "results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "|    |   refit_value |   seconds |   metric |\n",
      "|---:|--------------:|----------:|---------:|\n",
      "|  0 |         False |   1.35568 |  262.509 |\n",
      "|  4 |            30 |   3.99507 |  263.429 |\n",
      "|  3 |            14 |   6.33748 |  262.528 |\n",
      "|  2 |             7 |  11.0809  |  261.351 |\n",
      "|  1 |          True |  69.1455  |  258.736 |\n"
     ]
    }
   ],
   "source": [
    "print(results.to_markdown())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "matplotlib.legend WARNING No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 700x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(7, 4))\n",
    "ax.plot(results['refit_value'].astype(str).to_numpy(), results['seconds'], marker='.')\n",
    "ax2 = ax.twinx()\n",
    "sns.pointplot(x=results['refit_value'].astype(str).to_numpy(), y=results['metric'], \n",
    "              join=False, ax=ax2)\n",
    "# ax2.plot(results['refit_value'].astype(str).to_numpy(), results['metric'], marker='.')\n",
    "\n",
    "ax.set_xlabel('length of series')\n",
    "ax.set_ylabel('time (seconds)')\n",
    "ax.set_title('Profiling create_train_X_y()')\n",
    "ax.legend(title='number of lags');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "skforecast_py12",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.11"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
